package org.fujay.commons.langchain4j.rag.store;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.List;

/**
 * @author slm
 * @description Milvus向量数据库配置属性
 */
@Data
@ConfigurationProperties(prefix = "milvus")
public class MilvusProperties {

    /**
     * 是否启用Milvus向量库
     */
    private boolean enable = false;

    /**
     * 主机地址
     */
    private String host = "127.0.0.1";

    /**
     * 端口号
     */
    private int port = 19530;

    /**
     * 集合名称
     */
    private String collectionName = "document_store";

    /**
     * 连接URI，优先于host和port
     */
    private String uri;

    /**
     * 访问token
     */
    private String token;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 连接超时时间（毫秒）
     */
    private int connectTimeoutMs = 10000;

    /**
     * 向量维度
     */
    private int dimension = 1536;

    /**
     * 索引类型，如"IVF_FLAT", "HNSW"等
     */
    private String indexType = "HNSW";

    /**
     * 度量类型，如"L2", "IP", "COSINE"等
     */
    private String metricType = "COSINE";

    /**
     * HNSW索引ef_construction参数
     */
    private int efConstruction = 200;

    /**
     * IVF索引nlist参数
     */
    private int nlist = 1024;

    /**
     * HNSW索引M参数
     */
    private int m = 16;

    /**
     * 相似度字段名
     */
    private String similarityFieldName = "similarity";

    /**
     * 文本字段名
     */
    private String textField = "text";

    /**
     * 元数据字段列表
     */
    private List<String> metadataFields;

    /**
     * 首次启动时是否删除已存在的集合
     */
    private boolean dropCollectionFirst = false;

    /**
     * 相似度阈值
     */
    private float similarityThreshold = 0.7f;

    /**
     * 最大连接数
     */
    private int maxConnections = 10;

    /**
     * 该分区数据库的最大加载数据量
     */
    private int maxLoadingDataSize = 500;

    /**
     * 描述字段最大长度
     */
    private int maxTextLength = 65535;
}
